#include "dark-extermination.h"



DarkExtermination::DarkExtermination (){
	initialize();
	setupScene();
}

void DarkExtermination::setupScene(){

	// Creamos un manejador de escena genérico (podría haber sido de tipo octree, terrain, etc)
	sceneMgr = root->createSceneManager(ST_GENERIC, "Manejador de escena");
	
	// Creamos la cámara y el nodo del que dependerá
	camera = sceneMgr->createCamera("PlayerCam");
	cameraNode = sceneMgr->getRootSceneNode()->createChildSceneNode();
	cameraNode->attachObject(camera);
	// Posicionamos la cámara
	camera->setPosition(Vector3(5, 6, 7));
	camera->lookAt(Vector3(0,0,0));
	camera->setNearClipDistance(1);
	
	// Creamos una vista que ocupe toda la ventana
	Viewport* vp = window->addViewport(camera);
	vp->setBackgroundColour(ColourValue(0.5,0.5,0.5));

	// Establecemos el ratio de aspecto para que sea correcto
	camera->setAspectRatio( Real(vp->getActualWidth()) / Real(vp->getActualHeight()) );
	
	// Establecemos el nivel de mipmaping
	TextureManager::getSingleton().setDefaultNumMipmaps(5);

	
	
	/** Creamos la escena */
	
	// Añadimos el cubo a la escena
	Entity *ent = sceneMgr->createEntity( "Cube", "Cube.mesh" );
	ent->setCastShadows(false);
	sceneMgr->getRootSceneNode()->attachObject( ent );


}
void DarkExtermination::initialize()
{
	/** Inicialización de Ogre */

	// Creamos el objeto principal
	root = new Root("plugins.cfg", "config.cfg", "pong3d.log");

	// Establecemos donde estarán los recursos (objetos y sus texturas, etc)
	ResourceGroupManager &resources=ResourceGroupManager::getSingleton();
	resources.addResourceLocation("data","FileSystem");
	resources.addResourceLocation("data/dani","FileSystem");
	
	// Cargamos todos los recursos
	resources.initialiseAllResourceGroups();

	// Leemos la configuración de config.cfg
	root->restoreConfig();
	// Aquí elegimos que el sistema cree una ventana  de renderizado por defecto al pasar la opción "true"
	window = root->initialise(true);

}
int DarkExtermination::run()
{
	
	
	
	/** Bucle principal del juego */
	while (true)
	{
		WindowEventUtilities::messagePump(); // Necesario en windows
		root->renderOneFrame(); // Renderizamos un frame
	}



	return 0;
}

DarkExtermination::~DarkExtermination(){
	delete root;
}

